//
// Created by xie on 2021/1/12.
//

#ifndef CODEEXERCISE_OPERATION_H
#define CODEEXERCISE_OPERATION_H
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<queue>
using namespace std;

/**
Operation类
主要负责接收一个字符串，然后对字符串解析，规则为：
    1.如果字符串包含括号外的加减乘除，则按照加减乘除截断
    2.如果字符串仅包含一个函数，则将函数括号中的内容取出，作为子对象
该类有type变量，说明该对象是一个root对象，max，min，delta还是其他，根据这个变量，运算时进行不同的计算
**/

class Operation {
public:
    Operation(string str, map<string, int64_t> &data);
    virtual ~Operation(){}


    int64_t getResult();

    void update();

    bool inline only_alpha(string str){
        for (auto i :str)
            if ((i>='a' && i<='z') || (i>='A' && i<='Z'))
                continue;
            else return false;
        return true;
    }

    void analyse(string str);

    string type="";
private:
    string meta="";
    vector<Operation> vec_op;
    vector<char> calculator;
    map<string, int64_t> base_symbol;
    vector<int64_t> data;
    map<string, int64_t> & base_data;

};


class Delta{
public:
    Delta(){}
    ~Delta(){}
};

#endif //CODEEXERCISE_OPERATION_H

